\chapter{Specific Requirements}
\label{cap:Specific Requirements}
\raggedbottom
\section{Functional Requirements}
In this section will be described the functionalities of the app trough use cases, an example scenario and UML sequence diagram.
To ensure more clarity, requirements have been grouped according to their complexity in term of relation with the other use cases.
Basic functionalities represent those fundamental requirements which are essential to a have a basic system working.
Simple and Advanced functionalities, in the other hand, represent two complexity degrees of the functionalities that have to be implemented in order to respect the app business logic and to make the user to have a more advanced experience with the app.
In the end System and Administration Functionalities, represent those functionalities that do not directly concern with the business logic itself but are necessary to have an advanced management of the site and those that need an admin operation in order to be exploited since the system can't fulfill these tasks itself.
\begin{comment}
In questa sezione verranno descritte le funzionalit?/span> dell'applicazione attraverso casi d'uso, uno scenario esemplificativo e i sequence diagram UML.
Per amggioore chiarezza espositiva, i requirements sono stati raggruppati a seconda della complessit?/span> che richiedono in termini di relazione con gli altri casi d'uso. Le Basic Functionalities, rappresentano quei requisiti fondamentali, senza i quali non ?possibile nemmeno l'accesso agli altri servizi del sito. Simple e Advanced functionalities, rappresentano invece due gradi di complessit?/span> delle funzionalit?/span> che devono essere implementate per rispettare la logica di business dell'applicazione, e costituiscono l'esperienza avanzata dell'utente con l'applicazione. Infine le System and Amministration Functionalities, rappresentano quelle funzionalit?/span> che, o non fanno parte direttamente della Business logic, ma sono necessarie per avere una gestione avanzata del sito, o comunque necessitano di un intervento di un admin per essere svolte, in quanto il sistema non ?capace in solo di adempiere a tali tasks.
\end{comment}

\subsection{Basic Functionalities}
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Register  \\  \hline
                \textbf{Actors} & Guest \\ \hline
                \textbf{Trigger} & Guest decides to make an account in order to use the application.\\ \hline
                \textbf{Pre-condition} & Guest has not an account or, if he has, wants to make a new one.\\ \hline
                \textbf{Post-condition} & Guest is now registered and can login. \\ \hline
                \textbf{Event flow} 
                & 1. Guest is navigating the site and decides to register by clicking on the registration button \\ 
                & 2. The system shows the registration form. \\ 
                & 3. The user compiles the form and submits. \\ 
                & 4. The system checks for correct data.\\ 
                & 5. The system inserts data into the database and sends an email to the user. \\ 
                & 6. The user reads the email and confirm the registration.\\ 
                & 7. The user can now login\\ \hline
                \textbf{Exception} 
                & 1. The user compiles the form and submit. \\
                & 2a. The system checks and return an error due to an existing mail address in the database \\
                & 2b. The system checks and return an error due to a mandatory field not compiled. \\
                & 2c. The system checks and return an error due to an invalid password.\\
                & 2d. The system checks and return an error due to an invalid mail format.\\
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Carlo decided to try SWIMv2 because his friend told him to give a check to this useful website. Then, Carlo got more information about the site and he found out it was what he was looking for.
He entered the web page and looked for the register button and clicked on it. A form appeared and he started compiling it in all its field. When he submitted, the system returned an error saying that he forgot to compile a mandatory field. Thus he went on and compiled the missed field. Finally the system showed him a success message in where it was written to check the email address in order to confirm the registration. Carlo immediately went and cheek in his mail box, found that mail and clicked on the confirm link.
Now he can finally join the web site and exploit all its functionalities.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/Registration}}
         \caption{Registration Diagram}
\end{figure}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Delete account \\  \hline
                \textbf{Actors} & Logged user \\ \hline
                \textbf{Trigger} & Logged user click on delete account on his profile page\\ \hline
                \textbf{Pre-condition} & Logged user is on his profile page \\ \hline
                \textbf{Post-condition} & Logged user is now Guest and he isn't a registered user anymore. \\ \hline
                \textbf{Event flow} 
                & 1. Logged user clicks on delete account \\
                & 2. The system ask him if he is sure and inform him of all the implications of this action (for what concern the system) and ask him to confirm \\
                & 3. The user agrees with this request \\
                & 4. The system update the friend list of all his friends, then deletes all the users data  (his feedback are not removed) \\
                \\ \hline
                \textbf{Exception} & The user is the founder: An error message is shown saying that the founder cannot delete his account till he remains in his role. \\
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Daniel Pant is a Registered User who tired to spend time useless in the Swimnv2 Network, because in the and we all are going to die, and nothing is worth to be done in this world, even losing time. So he decided to cancel his account and all his data from Swimv2, in order to have no distraction in his meditations on chinese philosophy. He goes to his profile, select delete account, and tells the system he is sure to cancel all the data. Now daniel has no more a Swimv2 Account and all his friends have no more him on their friend list, because he doesn't exist anymore as registered user.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/DeleteAccount}}
         \caption{Delete Account Diagram}
\end{figure}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Login  \\  \hline
                \textbf{Actors} & Guest \\ \hline
                \textbf{Trigger} & Guest clicks on the login button after inserting his data in the form.\\ \hline
                \textbf{Pre-condition} & Guest is navigating the web site and he's a registered user\\ \hline
                \textbf{Post-condition} & Guest is now logged in (and became a logged user). \\ \hline
                \textbf{Event flow} 
                & 1. Guest insert his username and password in to the login form. \\ 
                & 2. The system checks the inserted data are correct. \\ 
                & 3. The Guest is now logged in and can exploit the site functionalities. \\  
                \hline
                \textbf{Exception} 
                & 1a. The guest is already logged in and try for the login.\\ 
                & 2a. System show a message telling the user he's already logged in. \\ 
                & 1b. Guest failed inserting the data. \\ 
                & 2b. System show an error message. \\
                \hline
        \end{tabular}
\end{center}

\textbf{Scenario} \\
Bob is an old SWIMv2 user and he decided to use the application to check if someone he helped left a feedback.
He went to the web page, inserted username and password in the form and then submitted in order to sign in. Something went wrong and the system told him the password or the username he inserted were not right. Patiently he tried again to insert his data and finally he was logged in.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/Login}}
         \caption{Login Diagram}
\end{figure}

\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Logout  \\  \hline
                \textbf{Actors} & Logged user \\ \hline
                \textbf{Trigger} & The user clicks on the logout button.\\ \hline
                \textbf{Pre-condition} & The user is logged in. \\ \hline
                \textbf{Post-condition} & The user is now logged out and became a common guest. \\ \hline
                \textbf{Event flow} 
                & 1. The user is navigating the web app exploiting the whole functionalities.\\
                & 2. The user decides to logout and clicks on the logout button. \\
                & 3. The system sets the users as not logged in.\\ 
                \hline
                \textbf{Exception} & No relevant exceptions expected.\\%NON SAPEREI CHE METTERE 
                \hline
        \end{tabular}
\end{center}
\noindent
\textbf{Scenario} \\
Mario has just used the app in order to find some help because he was in trouble with his computer. After sending some messages to other users he was done with the application and thus decided to logout. Finally he found the logout button, clicked on it and now he was logged out by the system.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/Logout}}
         \caption{Logout Diagram}
\end{figure}
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Search \\  \hline
                \textbf{Actors} & Logged User, Guest \\ \hline
                \textbf{Trigger} & The actor clicks on the research form \\ \hline
                \textbf{Pre-condition} & The actor must be in a page with a search form \\ \hline
                \textbf{Post-condition} & The actor retrieve a list of results matching the string he searched for \\ \hline
                \textbf{Event flow} 
                & 1. The actor writes a string into the search form \\ 
                & 2. The system will redirect the actor to a page showing all the matching registered users \\ 
                & 3. the actor organizes the output for name, abilities, or matching relevance \\ 
                & 4. The actor selects the results he more like  \\ 
                \hline
                \textbf{Exception} & no results found matching the input string, the actor will be suggested to use more generic input or advanced search. \\ 
                \hline
        \end{tabular}
\end{center}
\noindent
\textbf{Scenario} \\
Luigi is now living alone, his washbasin is broken and he does not want to ask his parents to fix it and nevertheless is able to fix it himself.
\\
Luckily he remembers of his old friend Mario Boss that is a plumber, so Luigi open Swim site, search for Mario Boss end press enter.
\\
In few seconds he sees  3 results of 3 different Mario Boss, just one of them is a plumber so he has found the right man for his job.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/Search}}
         \caption{Search Friend Diagram}
\end{figure}

\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Advanced search \\  \hline
                \textbf{Actors} & Guest, Logged User \\ \hline
                \textbf{Trigger} & The actor clicks on the advanced search button\\ \hline
                \textbf{Pre-condition} & The actor must be in a page with a search form\\ \hline
                \textbf{Post-condition} & The actor will receive a list of registered users that matches the search constraints  \\ \hline
                \textbf{Event flow} 
                & 1. The actor clicks on the advanced search functionality \\ 
                & 2. The actors fill the forms  for name, sex, abilities, residence etc. \\ 
                & 3. The system will list all the registered users matching the search constraints. \\ 
                & 4. The users organize the search output ordering it for name, abilities, sex etc. \\ 
                & 5. The users selects all the desired results \\ 
                \hline
                \textbf{Exception} &  no matching users for the constraints, the system will output ``no user found for these search''\\ 
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Dorian needs a chartered accountant to solve some economical business, but he wants a woman because he thinks they are better in this kind of work and also he wants someone from his own town because he does not trust foreign people. \\
So he logs in to swim site and clicks on the advanced search button, he fills the forms according to his needs and press enter. \\
The system list some results, and can finally pick the one he wants for the job.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/AdvancedSearch}}
         \caption{Advanced Search Diagram}
\end{figure}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Add friends  \\  \hline
                \textbf{Actors} & Logged User \\ \hline
                \textbf{Trigger} & The user want to add someone as a friend\\ \hline
                \textbf{Pre-condition} & the user must identify the name o a user, or visit his profile \\ \hline
                \textbf{Post-condition} &  The selected friend is now a direct friend. All his friends will be suggested as possible friends. \\ \hline
                \textbf{Event flow} 
                & 1. The user identifies another registered user. \\ 
                & 2. The user sends him a request of friendship. \\ 
                & 3. The other user receives the friendship request and accept it \\ 
                & 4. Both users have now another friend (they just will have each other as friends), and all their friends will be suggested as possibles ones \\ \hline
                \textbf{Exception} & The other users rejects the friendship request, nothing happens or changes, but the other user will no more receive again request of friendship from the first one  \\ 
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Kelly is a registered swim user, she wants to add her friend Terry, so she search for Terry and ask her a friendship request. Terry receives the friend request and accept it, now both have a friend more.
Kelly then decides to add Shelly, so does all this operation, but unfortunately Shelly is not such in a good mood so does not accept the friendship request. Nothing bad happens but Kelly can't send other friendship request to Kelly.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/AddFriends}}
         \caption{Add Friends Diagram}
\end{figure}
\subsection{Simple Functionalists}
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Send messages  \\  \hline
                \textbf{Actors} &  Guest, Logged user\\ \hline
                \textbf{Trigger} & 1. The user is looking for help or just wants to send a message to a friend\\& 2.The user entered the messages view\\ \hline
                \textbf{Pre-condition} & The user types a message.\\ \hline
                \textbf{Post-condition} &  The message gets to the recipient.\\ \hline
                \textbf{Event flow} 
                & 1.The user entered someone's profile.\\ 
                & 2. The user clicks on 'contact-user' button\\
                & 3. The user types the messages in the form.\\ 
                & 4. The user clicks on 'Send' button.\\ 
                & 5. The system takes care of sending the message.\\
                & 6.The system succeed in sending the message and show a success message.\\
                & 7. The recipient reads the message \\ 
                \hline
                \textbf{Exception} 
                & 1.The user entered someone's profile.\\ 
                & 2. The user clicks on 'contact-user' button\\
                & 3. The user types the messages in the form.\\ 
                & 4. The user clicks on 'Send' button.\\ 
                & 5. The system takes care of sending the message.\\
                & 6. The system failed in sending the message and show an insucces message.\\
                & 7. The user tries again to send the message.   \\ 
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Stacie was looking for someone who could repair her pc. Founded the right person she decided to contact him and thus, entered his profile, she clicked on 'contact user' button. A message form appeared and she start typing her message. Once done she click on the send button and waited for a system answer, unfortunately the system encountered an error and showed a message to her saying something didn't go well. Then she tried again but this time everything was good and a success message was shown to her.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/SendMessage}}
         \caption{Send Message Diagram}
\end{figure}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Receive messages  \\  \hline
                \textbf{Actors} & Logged user \\ \hline
                \textbf{Trigger} & The system notifies the user he got a message.\\ \hline
                \textbf{Pre-condition} &A message has been sent successfully to someone. \\ \hline
                \textbf{Post-condition} & The user reads the message \\ \hline
                \textbf{Event flow} 
                & 1. The system notifies the user he received a message. \\
                &2. The user joins his inbox and reads the message.  \\ \hline
                \textbf{Exception} 
                & 1. The system notifies the user he received a message\\
                & 2. The user joins his inbox and deletes the message without reading it.   \\ 
                \hline
        \end{tabular}
\end{center}
\noindent
\textbf{Scenario} \\
Felicity is a student who gives private lessons to earn some money; today wants to check if someone needs lessons so she log in her Swim account. The system notifies her of 2 incoming messages, one of the 2 messages is from a certain John R. who, she happen to know is just an annoying person so she just delete the messages without even reading it.
The other message is from Bob K. so she reads it.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/ReceiveMessage}}
         \caption{Receive Message Diagram}
\end{figure}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Modify profile  \\  \hline
                \textbf{Actors} & Logged User  \\ \hline
                \textbf{Trigger} & A Logged User enters the Modify Profile section\\ \hline
                \textbf{Pre-condition} & User must be logged in \\ \hline
                \textbf{Post-condition} & User's profile has been changed  \\ \hline
                \textbf{Event flow} 
                & 1. Users goes to his own profile-page \\ 
                & 2. The user clicks on the Modify profile button\\ 
                & 3. Users change his privacy settings, his abilities or his personal data \\ 
                & 4. Users press save changes button \\ 
                \hline
                \textbf{Exception} 
                & 1. User discart changes, exiting the procedure without modify anything \\
                & 2. User while modifying the data doesn't fill mandatory data fields (name, residence, e-mail) so the save changes will not work and the system will display an error message with all the forms that should be filled \\
                \hline
        \end{tabular}
\end{center}

\newpage
\textbf{Scenario} \\
Chris, or maybe we should call her Christine at this point, has just come back from Casablanca with a new sex, she's now a beautiful girl and wants to update her profile status.
For this reason she goes to his profile page, clicks on the modify button, look s for the Name and sex and update them correctly.
\\
Press save changes button to save his action. 
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/ModifyProfile}}
         \caption{Modify Profile Diagram}
\end{figure}
\clearpage 
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Search among friends  \\  \hline
                \textbf{Actors} & Logged User  \\ \hline
                \textbf{Trigger} & The user clicks on ``your friends'' button\\ \hline
                \textbf{Pre-condition} & The user must be logged in\\ \hline
                \textbf{Post-condition} & The user will retrieve all the friends he was looking for  \\ \hline
                \textbf{Event flow} 
                & 1. The user enters the ``your friends'' section \\ 
                & 2. The users clicks on the search form \\ 
                & 3. The user enters a search string \\ 
                & 4. The system will display only the friends matching the string \\ 
                & 5. The user can select the friends he is searching for  \\ 
                \hline
                \textbf{Exception} & The user has no friends or no friends that matches the search string: the system will show a ``no friend found'' message \\ 
                \hline
        \end{tabular}
\end{center}
\noindent
\textbf{Scenario} \\
It's December 22nd and there is a lot of snow in front of Ned's house, he decides to ask help to one of his friends: Homer Thompson.
\\
Ned logs in his swim account and enters the "your friends" section. He clicks on the search form and enter "Homer Thompson" and press enter.
\\
The system shows him a list of a single element: his friend Homer. Ned click on Homer (now he can ask him for help).
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/SearchAmongFriends}}
         \caption{Search Among Friends Diagram}
\end{figure}
\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Add suggested friends  \\  \hline
                \textbf{Actors} & Logged user\\ \hline
                \textbf{Trigger} & The user want to expand his friend list with people friend of another friends \\ \hline
                \textbf{Pre-condition} & The user must have at least a direct friend with anothers friends that aren't also their friends \\ \hline
                \textbf{Post-condition} & The two user will have another friend, but no others suggested friends  \\ \hline
                \textbf{Event flow} 
                & 1. The user enters the ``suggested friends'' page \\ 
                & 2. the user selects one of the suggested friends, also searching they with a search form \\ 
                & 3. the users send a friendship request to the selected suggested friend. \\ 
                & 4. The other user receive the friendship request and accept it \\ 
                & 5. both users have now another indirect friend (they just will have each other as friends), nothing else changes. \\ 
                \hline
                \textbf{Exception} & The other users rejects the friendship request, nothing happens or changes, but the other user will no more receve again request of friendship from the first one \\ 
                \hline
        \end{tabular}
\end{center}

\newpage
\textbf{Scenario} \\
James is a Swim registered user, wants to know if he can add some suggested friend that may help him in some situation. He goes to "suggested friends" page, he select one of them: Mirabelle Cervine and send him a friendship request. Once Mirabelle log in, she is informed by the system of the new request and accept it, now they both have an indirect friend more.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/AddSuggestedFriends}}
         \caption{Add Suggested Friends Diagram}
\end{figure}
\subsection{Advanced Fuctionalities}

\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Search for help  \\  \hline
                \textbf{Actors} & Guest, Logged User \\ \hline
                \textbf{Trigger} & The user needs help\\ \hline
                \textbf{Pre-condition} & The user is navigating the web site,
                 \\& has found another user who maybe can help him \\ \hline
                \textbf{Post-condition} & The user finds the help he looks for \\ \hline
                \textbf{Event flow} 
                & 1. The user clicks on send message.\\
                & 2. If the user is a guest the system shows the outside mail form otherwise the message tool. \\
                & 3. The user types a message to a registered user he wants help from and waits for an answer. \\ 
                & 4. The receiver reads the message and types back.\\
                & 5. If the user is a Guest the receiver will type back to guest's mail guest provided before, if the user logged the receiver will type back by using the application message tool. \\
                & 6. User and receiver types them self an undefined number of time in order to make an agreement. (This happens out of the web site) \\
                & 7. The receiver provides the help to the user \\ 
                \hline
                \textbf{Exception} 
                & 1. The user send a message to a registered user. \\
                & 2. They can't get an agreement. \\
                & 3. The user looks for another person to get help from  \\ 
                \hline
        \end{tabular}
\end{center}
\textbf{Scenario} \\
The leak of water in Dave's tap made him looks for a plumber. Since he didn't know anyone who can rapidly come and help him, he decided to check if maybe there was someone available on SWIMv2 a website a friend advised to him. He navigated the web, joined the website and, by using the researching tools available in the app, immediately looked for people who could have helped him. He found Edoardo who seemed the right person.
Dave sent Edoardo a message where he was constrained by the system to provide at least an email address in order to be typed back  asking for an immediate help. Unfortunately Edoardo answered back saying he wasn't in the area in those days and told Dave to look for another one. Patiently Dave looked again for another person and got contact with Claud, another person with that ability. Immediately he contacted Claud and after a series of according messages they got an agreement. The two met and Claud repaired Dave's tap.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/SearchForHelp}}
         \caption{Search For Help Diagram}
\end{figure}

\newpage
\begin{center}[t]
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Formal Search for help  \\  \hline
                \textbf{Actors} & Logged user \\ \hline
                \textbf{Trigger} & The user needs help\\ \hline
                \textbf{Pre-condition}& The user needs help \\ \hline
                \textbf{Post-condition} & The user finds the help he looks for, the help request is registered \\ \hline
                \textbf{Event flow} 
                & 1. The user search for a person who can help him. \\
                & 2. User and helper types themself an undefinetly number of time in order to make an agreement. \\
                & 3. The user send the helper a formal 'Help Request'. \\
                & 4. The system notifies the helper he got a new formal 'Help Request'. \\
                & 5. The helper formally answers in a positive way to Help Request. \\
                & 6. The receiver provides the help to the user. \\ 
                & 7. The user, if he wants, leaves a positive feedback within a month. \\
                \hline
                \textbf{Exception} 
                & 1. The user search for a person who can help him. \\
                & 2. User and helper types themselves an indefinitely number of time in order to make an agreement. \\ &\\
                
                & 3a. User and helper do not get an agreement. \\
                & 4a. The user looks for another person to get help from.  \\ &\\
                
                & 3b. The user send the helper a formal 'Help Request'. \\
                & 4b. The helper formally answers in a positive way to Help Request. \\
                & 5b. The helper doesn't provide the expected help to the user for some reason. \\ 
                & 6b. The user, if he wants, leaves a negative feedback within a month. \\ &\\
                
                & 3c. The user send the helper a formal 'Help Request'. \\
                & 4c. The helper formally answers in a positive way to Help Request. \\
                & 5c. The helper doesn't provide the expected help to the user for some reason. \\ 
                & 6c. A month Passes and no feedback was left by the user. \\
                & 7c. The negotiations is automatically closed. \\ &\\
                
                & 3d. The user send the helper a formal 'Help Request'. \\
                & 4d. The helper formally answers in a negative way to Help Request. \\
                & 5d. The negotiations is automatically closed. \\
                & 6d. The user looks for another person to get help from. \\
                \hline
        \end{tabular}
\end{center}

\newpage
\textbf{Scenario} \\
Tom needs a new electrical access in his living room wall. so he decide to look for an electric-man on swim.
He logs in and searches for one of this professionist: Bob. Tom send Bob interchange some messages in order to find an agreement.Once they find this agreement Tom compiles a 'Help Form' in which he includes some basic informations about his situation.
Bob receive the Help Request and accepts it.
Everything is ok and Bob did the job Tom expected. Thus Tom leaves a positive feedback to Bob the very next day and the negotiations terminates.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/FormalSearchForHelp}}
         \caption{Formal Search Diagram}
\end{figure}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Provide feedbacks  \\  \hline
                \textbf{Actors} & Logged users\\ \hline
                \textbf{Trigger} & A logged user wants to provide a feedback to another user\\ \hline
                \textbf{Pre-condition} & The second user has accepted a Help Request of the first user  \\
                 & The second user should have helped the first one. \\ \hline
                \textbf{Post-condition} & The second user will  receive a feedback from the latter \\ \hline
                \textbf{Event flow} 
                & 1. The first user visit the profile of the second user. \\ 
                & 2. The user clicks on ``leave a feedback'' button \\ 
                & 3. The user insert valutation and a short comment about the help received \\ 
                & 4. The user clicks on the ``ok'' button\\ 
                & 5. The feedback will be put toghether other's second user feedbacks   \\ 
                \hline
                \textbf{Exception}
                & 1. The first user doesn't enter the valutation of the second one, the ``ok'' button will not work, and an error message will be displayed \\ 
                & 2. The first user change his mind and press the ``change'' button, no feedback will be leaved to the second one. \\ 
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Bob have to admit it: Mary Jane has done a very good job with Dog, Mary is a dog trainer and helped Bob to teach some trick to his dog.
%% or a veterinary and took care of his rooster..
\\
So Bob wants to leave a good feedback on Mary profile: he goes on her profile, click on "leave a feed-back" button.He insert a good valuation and a short comment "She was kind, nice and very professional", he clicks the "ok" button. The system enter the feedback and update the profile.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/ProvideFeedbacks}}
         \caption{Provide Feedbacks Diagram}
\end{figure}
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Read feedbacks \\  \hline
                \textbf{Actors} & Logged user \\ \hline
                \textbf{Trigger} & Logged user navigate to his feedback page\\ \hline
                \textbf{Pre-condition} & Logged user is logged in \\ \hline
                \textbf{Post-condition} &  Have read his feedbacks\\ \hline
                \textbf{Event flow}
                & 1. The user navigate to his profile \\
                & 2. The user clicks on "My feedbacks" or something like that \\
                & 3. The system redirect him to his feedbacks page \\
                & 4. The user reads his feedbacks \\
                \hline
                \textbf{Exception} &  There are no feedback for him so the system
                        show a message or something similar informing him of the fact he has no feedbacks at the moment \\
                \hline
        \end{tabular}
\end{center}
\noindent
\textbf{Scenario} \\
Dr. Danny Brough  %%too much obvious??
wants to check the feedback for the work he recently done for Mary who needed help for fixing her no more consistent MySql  Database. It was the first work for someone since he made his account.
He logs in, he navigates to his profile and clicks on "My feedbacks". Unfortunately Mary has been busy this days so haven't written any feedback, so Danny gets a message from the system saying that there are no feedback s for him yet. 
%% Danny now hates swim, even more.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/ReadFeedback}}
         \caption{Read Feedback Diagram}
\end{figure}
\subsection{System and Amministration Functionalities}
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Dispute feedbacks  \\  \hline
                \textbf{Actors} & Logged user  \\ \hline
                \textbf{Trigger} &  Logged user clicks on dispute (we suppose dispute is near to each feedback) \\ \hline
                \textbf{Pre-condition} & Logged user he's viewing his feeback in an apposite page  \\ \hline
                \textbf{Post-condition} &  Feedback is now contested \\ \hline
                \textbf{Event flow}  
                & 1. The user views a feedback he does not like \\
                & 2. The user clicks on "Dispute feedback" \\
                & 3. The system provides him a form in which he can comment \\
                & 4. The user fills this form explaining why he does not agree with the feedback \\
                & 5. The user submits the form \\
                & 6. The system update the status of the feed back and show the comment \\
                \hline
                \textbf{Exception} & The users changes his mind and cancel the entire operation. Nothing else happens. \\
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
John hates Dave so wants to leave him a bad feedback even if Dave has never worked for John. So, as soon as Dave accepts the formal Help Request, John leaves a bad and unjustified feedback.
Dave now wants to dispute this feedback so he logs in goes to his feedback page and look for John's feedback.\\
Clicks on "dispute feedback" , the system provides him a form, he writes "He never worked for me" and give ok.\\
The system update the feedback.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/DisputeFeedback}}
         \caption{Dispute Feedback Diagram}
\end{figure}
\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Add ablities  \\  \hline
                \textbf{Actors} & Admin, Founder \\ \hline
                \textbf{Trigger} &  The actor click on "add ability" (or something similar) on his profile page \\ \hline
                \textbf{Pre-condition} & The actore is logged in and on his profile page\\ \hline
                \textbf{Post-condition} & The new ability is added \\ \hline
                \textbf{Event flow} 
                & 1 The actor click on "add ability" \\
                & 2 The system redirect him to a special page with a form \\
                & 3 The actor fill the form and type the new ability \\
                & 4 The actor submit the form \\
                & 5 The system check if the ability is already present, if it is not the system adds it to the set of the ability \\
                \hline
                \textbf{Exception} & The ability is already present in the system so the system inform the user of that\\
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Ernest can't do anything of really useful, but he can do something that few people can do: he knows how fix lots of electric devices with a strong strike of hand.
\\
 Even if it is not a real ability he decides to ask the swim site to add it. So he logs in and he navigates to the page where users can ask for abilities. \\
He fills the form "Fix electrical devices with a strike of hand" and submit the form. \\
The system updates each admin and the founder of the new request.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/AddAbilities}}
         \caption{Add Abilities Diagram}
\end{figure}
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Ask for abilities  \\  \hline
                \textbf{Actors} & Logged user  \\ \hline
                \textbf{Trigger} & Logged  user navigates to a special page which aim is permitting new abilities requests \\ \hline
                \textbf{Pre-condition} & Nothing\\ \hline
                \textbf{Post-condition} &  The ability request is sent \\ \hline
                \textbf{Event flow} 
                & 1. The  user navigates to the page when he can ask for new abilities \\
                & 2. The system shows him a form where for the request \\
                & 3. The user fills it explaining reason for asking it and ability name \\
                & 4. The user submits the form \\
                & 5. The system informs each admin and the founder of the new request \\
                \hline
                \textbf{Exception} & The user changes his mind and cancel the operation. Nothing else happens. \\
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Isolda, a long date SWIMv2 user, is really good at cooking. She noticed there wasn't this kind of ability in the app. Once she logged in, she navigated the 'ask for new abilities' page, compiled the shown form and then submitted it.
After a while she got an answer: now Isolda was able to modify her profile by adding this kind of ability.

\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/AskForAbilities}}
         \caption{Ask for Abilities Diagram}
\end{figure}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Ban users  \\  \hline
                \textbf{Actors} & Admin, Founder \\ \hline
                \textbf{Trigger} &  The actor clicks on the user's name with bad behaviour \\ \hline
                \textbf{Pre-condition} & There are some reasons to ban a user, such as site policy violations\\ \hline
                \textbf{Post-condition} & The user is banned \\ \hline
                \textbf{Event flow}
                & 1. The actor clicks on the user name \\
                & 2. The system let him see the user profile in terms of users's privacy settings, with a "ban button"  (or ban link) \\
                & 3. The actor clicks on the bun button \\
                & 4. The system ask the actor if he is sure \\
                & 5. The actor agrees \\
                & 6. The system ask for an amount of time for the ban \\
                & 7. The actor set the amount of time for the ban \\
                & 8. The system ban the user for the given amount of time \\
                \hline
                \textbf{Exception} & The actor try to ban another admin and the system forbid it and give him a message \\
                \hline
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
John is an admin of the swim network, he has received a messages from Dave who says that another user Wallace is threatening him in a feedback and gives him the link of the feedback. \\
John follow the link in order to ban Wallace since feedback are not intended to be used to talk with other users and so Wallace is clearly violating the site rules. \\
Once there John discover that Wallace is also posting racist and offensive material so he decide to ban him. \\
John clicks on Wallace, open his profile and click on the "ban button".
The system provide him a form, John choose 3 months and submit it.
The system will apply the ban.
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/BanUser}}
         \caption{Ban User Diagram}
\end{figure}
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Nominate new admin  \\  \hline
                \textbf{Actors} & Founder \\ \hline
                \textbf{Trigger} & The Founder clicks on add new admin on his profile\\ \hline
                \textbf{Pre-condition} & The actor is logged in and on his profile page \\ \hline
                \textbf{Post-condition} & A new admin is added to the system \\ \hline
                \textbf{Event flow}
                & 1 The Founder clicks on "add new admin" \\
                & 2 The system redirect him to a page where he can search \\
                & 3 The Founder type the new admin name on the search field \\
                & 4 The system looks for this user \\
                & 5 The Founder select him by clicking it \\
                & 6 The system made this user an admin \\
                \hline
                \textbf{Exception} &  The Founder types a wrong name and the system informs him that there are no users with that name  \\
                \hline
        \end{tabular}
\end{center}
\noindent
\textbf{Scenario} \\
Grelod Kind is a swimv2 admin. She just opened a new orphanage in the center of the town, so she hasn't much time now to work on swim, but, as she loves this system that helped her open the activity she always dream, she ask a very close friend, Aventus Aretino, to help her with his hobby on swim. So she enters the sites, goes to the page add new admin and write Aventus in the search form. Because Aventus it's a very strange ad unusual name, it's the only name appearing in the results. Grelod selects Aventus and now Aventus is another swimv2 admin and he can help Grelod so she can take care to the orphans without get stressed too much.
\begin{center}
\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/NewAdmin}}
         \caption{New Admin Diagram}
\end{figure}
\end{center}

\newpage
\begin{center}
        \begin{tabular}{|p{3cm}|p{10cm}|}
                \hline
                \textbf{Use Case} & Change founder  \\  \hline
                \textbf{Actors} &  Founder \\ \hline
                \textbf{Trigger} & Founder click on "Define new founder" from his profile\\ \hline
                \textbf{Pre-condition} & Founder is logged in and on his profile \\ \hline
                \textbf{Post-condition} & A new Founder is set \\ \hline
                \textbf{Event flow}
                & 1. The Founder clicks on "Define new founder" \\
                & 2. The system redirect him to a page where there is a search form \\
                & 3. The Founder type the name of the user he wants to nominate as Founder \\
                & 4. The system show him the user with that name \\
                & 5. The Founder select this name and click on it \\
                & 6. The system ask the founder if he is sure \\
                & 7. the Founder confirm \\
                & 8. The system set the new founder and remove the first one \\
                \hline
                \textbf{Exception} & The founder types a wrong name and the system informs him that there are no users with that name\\  
                \hline
                
        \end{tabular}
\end{center}
\newpage
\textbf{Scenario} \\
Bill Charmer is the founder of Swimv2. He just get enrolled in a south-american paramilitary army to fight terrorist in the south of Colombia. As he realize he wouldn't have much time to work in his beloved project, and because it's clear that now has an extremely dangerous work, he decide to designate another user as admin. For this task he selected a very skilled person, that has previous experiences with this time of systems: his ex-girlfriend, Mamba Black. So enters swim site, log in, and select Define new founder from his Founder panel. Type Mamba on the search form. Lot of people appears, so he organize the list for sex. Fortunately only his ex-girlfriend is a woman named Mamba. Bill selects her, and obviously tell the system he is sure to change the founder. Now Bill is not anymore the founder and he is free to fight terrorist in Colombia.

\begin{figure}[!ht]
         \centerline{\includegraphics[scale=0.5]{images/sequence/ChangeFounder}}
         \caption{Change Founder Diagram}
\end{figure}
\newpage\flushbottom
\section{Performance Requirements}
\begin{comment}
Trattandosi di una web application, il sitema deve essere pensato per rispondere e reagire alle richieste dell'utente in intervali di tempo estremamente brevi, nell'ordine del secondo, assumendo che la banda disponibile in uscita e ingresso al sistema sia sufficente a rispondere alle richieste degli utenti in tempi brevissimi.
Il sistema ?un social network, quindi non ?possibile stimare a priori quanti utenti contemporaneamente risulteranno connessi in un determinato istante. Si p?/span> supporre, in caso di successo dell'applicazione, una crescita esponenziale del numero degli utenti nel tempo nella fase iniziale, seguita a una fase di relativa stabilit?/span>, con una crescita lineare/meno che lineare. Il sistema non deve perci?/span> essere progettato per reggere un determinato numero di utenti, ma per poter scalare le sue prestazioni in maniera abbastanza rapida. 
\end{comment}
Since our system is a web application, it has to react to users requests in very short amount of time, in about a second or less. We suppose that the system connectivity is good enough to reply the users requests in very short time. \\
Our system is a social network, so it is not possible estimate a-priori how many people can be connected at the same time. We can suppose that in case of success of the application, the number of connected user will grow exponentially at the beginning and then linearly or less then linearly. \\
\begin{comment}
Altro fattore da tenere in considerazione sono gli orari di picco delle connessioni degli utenti, si pu?/span> immaginare che i picchi possano essere all'ora di pranzo (12-13), nel tardo pomeriggio (16-18) e alla sera (20-22). Il sistema dovrebbe essere tarato per svolgere le operazioni interne soprattutto nelle fascie orarie meno a rischio, lasciando tutta la potenza computazionale nei periodi di punta per la gestione degli utenti.
\end {comment}
Our system has not to be projected to stand  a certain fixed number of users, but to scale its performance in a quite quick way.
Another thing we have to mind at, are pick time of connections, we can for instance imagine that people are going to connect to the site at lunchtime ( 12 - 13)  or in the late afternoon (16 - 18) and in the evening (20-22).  The system should be set to handle internal operation in less critical  hours, in order to grant all the possible computational power in pick-time to handle users connections. 
\begin{comment}
Si suppone che il sistema sia inizialmente limitato ai confini di una singola nazione, ma deve essere pensato in modo che eventuali modifiche per renderlo distribuito siano fattibili, in modo da poter ridurre il tempo di connessione (trovare nome corretto) degli utenti di nazioni molto distanti, e poter attuare le politiche di bilanciamento della potenza di calcolo nelle fascie orarie di picco per orgni paese.
l'unico elemento che pu?/span> permettersi di rispondere in tempi compresi tra i 2-3s ?il modulo di ricerca, in quanto una ricerca approfondita e accurata ?preferibile sicuramente a una ricerca molto rapida, ma inaccurata: lo scopo del sistema ?infatti trovare la persona migliore per un determinato problema, anche a discapito di una relativa lentezza della risposta.
\end{comment}
We suppose that our system is limited in a single state, but it has to be thought to be easily distributed.
It has to be possible to edit it in order to slow the connection time (find the right name) for user in very far countries. It also has to be possible to perform policy of power balancing according to pick-time for each country.
The only thing that can have relatively long response time (2-3 seconds) is the search module. That because a slow but accurate search is better then a fast but inaccurate one, the aim of the system, sure enough, is to find the best person for a certain job, even if this implies a little latency in the system answer.
\section{Design Constraints}
\begin{comment}
L'unico vero e proprio constraint di design ?l'architettura Model-View-Controller, fortemente suggerita dallo standard JEE e da JBoss in ambito web Application. L'utilizzo di questo pattern, pur non essendo realmente imposto dal web server, ?fortissimamente consigliabile, vista sia la naturalezza nell'ambito web, dove vi ?una fortissima discrepanza tra view (la pagina html) e il controller (le classi java), sia per questioni di modularit?/span>, pulizia, ed estendibilit?/span> del codice e dell'applicazione.
\end{comment}
The only effective design constraint is the Model-View-Controller architecture, strongly suggested by the JEE standard and by JBoss in web Application contest. \\
 The use of this pattern, even if it is not imposed by the web server, is very advisable either because is a natural choice in web contest, and also for reasons of modularity, cleanness and extendibility of the code.
\\ 
  The MVC approach is very advisable in web context because view (html page) and controller (java classes) are very separated.
\subsection{Standard Compliance}
\begin{comment}
L'applicazione web che fornir?/span> l'interfaccia utente deve attenersi a due standard delle pagine web:
lo standard html5 (nella sua versione sperimentale) e lo standard css3. Entrambi gli standard sono standard sui linguaggi di markup del web, e devono essere adottati per poter fornire delle pagine che sfruttino a pieno la potenza espressiva delle nuove tecnologie web e dei browser che le implementano.
\end{comment}
The web application that will provide the graphical interface has to follow HTML 5 and Css 3 standard. \\
They both are markup languages standard, and have to be adopted in order to produce pages that can fully exploit the expressive power of the new technologies and that can exploit the browsers that implement them.
\newpage
\section{Software System Attributes}
\subsection{Reliability}
\begin{comment}
L'affidabilit?/span> non ?un requisito critico del sistema: si pu?/span> considerare il sistema sufficentemente affidabile anche con perdite (minori) di dati nell'ordine del 5/6\%.
Blocchi momentanei del sistema non dovrebbero causare alcun problema, anche se sono comunque, come del resto anche la perdita dei dati, sono problemi da risolvere nel modo pmigliore possibile, ma vanno messi sicuramente in secondo piano rispetto agli altri requisiti.
\end{comment}
Reliability is not a critical system requirement: the system can be considered reliable enough even if are present minor  data loss  (we talk about the 5-6 \% ) \\
Temporary system blocks should not cause any problem, even if they are nevertheless to avoid. The same consideration in true for the data loss as well.  This 2 problems have, sure enough, to be solved in the best way possible, but they are less important then other problems.
\subsection{Availability}
\begin{comment}
L'unico requirement di availability richiesto ?il funzionamento del sistema 24/7. Si suppone che le operazioni di salvataggio dei dati siano effettuate dal dbms, e che quindi non siano da prendere a carico dall'applicazione. Stesso discorso vale per eventuali blocchi totali del sistema, che dovrebbero essere gestiti dall'amministratore del sistema e dal sistema operativo. Come al solito, blocchi totali del sistema, dovuti a errori e/o manutenzione, devono essere evitati e resi il meno frequente e il meno duraturi possibile.
\end{comment}
The only availability requirement we have is that the system has to be working 24/7. \\
We suppose that data saving operations are done by the DBMS and hence the application has not to take care of them. \\
The same consideration is applicable to eventual total system blocks, that should be handled by operating system administrator. \\
As usual, total system blocks, caused by errors or maintenance, should be avoided as much as possible.
\subsection{Security}
\begin{comment}
La protezione dei dati personali ?un requisito di primaria importanza del sistema: la password non deve essere per nessuna ragione rilevata da intrusi, a questo scopo risulta necessario non salvare la password direttamente nel database, ma salvarne l'hash, ad esempio utilizzando l'algoritmo SHA-256, e aggiungere ad esso un sale per evitare anche gli attacchi absati su database di hash.
Il database, comunque deve essere protetto da eventuali tentativi di SQL Injection.
\end{comment}
Personal data protection is one of the most important system requirements: the password must not be revealed to outsiders, for no reason. \\
At this purpose we do not save the password directly in the Database, but we save its hash, for istance using a SHA-256 algorithm and adding to it a salt in order to avoid database-hash based attacks.
In any case the Database must be protected by SQL attacks. 
\begin{comment}
Per maggiore sicurezza dell'applicazione risulta utile e importante utilizzare il protocollo https per connettersi al sito, anzich?/span> il semplice protocollo http, in quanto un untente maligno (leggi, comunista come clod) potrebbe intercettare le comunicazioni in chiaro di quest'ultimo protocollo, e intercettare i dati sensibili dell'utente.
\end{comment}
In order to have a major level of security it is useful and important use the https  protocol to connect to the site, instead of the simple http protocol. \\
This because an evil user could intercept the communications in clear routing on the http protocol and intercept user's data as well.
\subsection{Maintainability}
\begin{comment}
la manutenibilit?/span> ?il requisito principale del sistema: essendo un ambiente atto a grosse modifiche evolutive, visto l'ambito applicativo e la rapida evoluzione delle tecnologie web, ?necessario rendere tutto il pi?/span> possibile modulare ed espandibile.
 In particolare ?importante generare una gerarchia di tipio di utenti, in modo da essere in grado di attribuire le stesse funzionalit?/span> comuni di base e aggiungere quelle della nova specifica classe senza provocare grosse
 modifiche al software.
  Importatissimo avere una trasparenza della view dall'ambito applicativo, in quanto un restiling grafico ?da considerarsi altamente probabile, con frequenza attesa di uno/due restyling ogni due anni.
\end{comment}
Maintainability is the main system requirement: since the system is prone to big evolutionary edits, and since web technologies evolve very quickly, we need to make the all system as modular and expandable as possible. \\
In particular way, it is important have a user-type hierarchy in order to be able to give common base functionalities and add new ones without changing the software too much.\\
Another very important requirement is the view transparency in the applicative context. This because a graphical restyling it to be considered extremely few probable, we may have one or two restyling in two years, at most.
Since the system can in no reasonable manners change its operative mode, it doesn't need to have too deep abstraction layer.
Although, as cited previously, the view should have to be extended in a reasonable handy way. Model, instead, should have to be expanded or replaced in order to eventually pass the database to a totally centralized system to a distributed one.
\begin{comment}
Il sistema non necessita di avere dei livelli di astrazione troppo profondi, in quanto ?decisamente improbabile che possa cambiare radicalmente il suo modo di operare. Tuttavia, come gi?/span> citato precedentemente, la view deve poter essere espansa in maniera abbastanza agevole, il model invece deve poter essere espanso o sostituito per poter eentaulmente passare il database da un sistema totalmente centralizzato, a un sistema web distribuito.
\end{comment}
\subsection{Portability}
Portability is an important system requirement: System should not be projected to run on a single machine only, but it should run on any machine satisfies system minimal software requirements. More, every database function, have to be encapsulated such that the understanding database is the most transparent to the high level applicative logic.
No Code line has to be 'OS-dependent; if this requirement is not realizable, it should be encapsulated an operation alternative for every common Operative System.
Portability is strongly helped by the used programming language: java
\begin{comment}
La potrtabilit?/span> ?un requisito importante del sistema: il sistema non deve essere assolutamente progettato per girare su una singola macchina, ma dovrebbe poter girare su qualsiasi macchina che soddisfi i requisiti software minimali del sistema. Inoltre, tutte le funzioni riguardanti il database, devono essere incapsulate in modo da rendere trasparente il pi?/span> possibile alla logica applicativa di alto livello il database sottostante.
Nessuna linea di codice deve essere OS-dependent, nel caso questo requisito sia irrealizzabile, ?di fondamentale importanza incapsulare tutte le possibili alternative di funzionamento per i principali sistemi operativi attuali.
La portabilit?/span> ?fortemente aiutata dal linguaggio di programmazione utilizzato, Java.
\end{comment}

